<?php

class FrbNewsletterClientController extends DooController {

  /**
   *
   * Le contenu de la newsletter
   * @var $content String
   */
  private $_content = null;

  /**
   *
   * Le tableau d'adresse mail des abonnées de la Newsletter
   * @var $address tableau d'adresse mail
   */
  private $_address = null;

  /**
   *
   * Le tableau qui contient l'historique des newsletter
   * @var array
   */
  private $_history = null;

  /**
   *
   * Adresse de l'expéditeur de la newsletter
   * @var String
   */
  private $_sender = "alliance-cafe@alliance.fr";

  /**
   *
   * L'instance XML contenant les adresses mails
   * @var SimpleXMLIterator
   */
  private $_xmlDb;

  /**
   *
   * L'instance XML contenant l'historique des newsletter
   * @var SimpleXMLElement
   */
  private $_xmlHistory;

  /**
   *
   * Chemin d'accès vers le XML
   * @var String
   */
  private $_path;

  /**
   *
   * Contructeur avec initialisation de l'objet XML
   * @return Un objet frbNewsletter_MainController
   */
  public function __construct() {
    $this->_path = Doo::conf()->SITE_PATH.'data/newsletterDB.xml';
    $this->_xmlDb = new SimpleXMLIterator($this->_path, null, true);
    $tmp = $this->_xmlDb->xpath("/addressDb/address");
    foreach ($tmp as $t) {
      $this->_address[] = (string) $t;
    }
  }

  /**
   *
   * Récupère le fichier XML de la BD qui contient l'historique des newsletter
   * Initialise la variable $this->_history en tant que tableau d'historique
   */
  private function loadHistory(){
    $pathHistory = Doo::conf()->SITE_PATH.'data/newsletterHistory.xml';
    $this->_xmlHistory = new SimpleXMLElement($pathHistory, null, true);
    $tmp = $this->_xmlHistory->xpath("/history/item");
    foreach ($tmp as $t) {
      $this->_history[] = array(
      						"date"=>(string) $t->date, 
      						"content"=>(string) $t->content, 
      						"count"=>(string) $t->count
      );
    }
  }

  /**
   *
   * Retourne un tableau contenant toutes les adresses disponibles
   * de la Newsletter
   * @return array() tableau à 1 dimension contenant toutes les adresses
   */
  public function getAllAddress() {
    return $this->_address;
  }

  /**
   *
   * Contenu de la newsletter
   * @return
   */
  public function setContent($body) {
    //Vérification à faire
    $this->_content = $body;
  }

  /**
   *
   * Envoie la newsletter à toutes les adresses abonnées à la newsletter et la stocke dans la base de données
   * @return true si tout c'est bien passé, un array avec les erreurs en cas de problème
   */
  public function send() {
    $err = array();
    //On vérifie si les adresses et le contenu du message est bien initialisé
    if ( $this->_address == null) $err['address'] = "Aucune adresse pour la newsletter";
    if( $this->_content == null) $err['content'] = "Aucun message pour la newsletter";
    if (sizeof($err) != 0) return $err;

    //On crée le mail pour envoie
    Doo::loadHelper("DooMailer");
    $mail = new DooMailer();
    $mail->setBodyHtml($this->_content);
    $mail->setFrom($this->_sender);
    $mail->setSubject("[L'Alliance] Newsletter du "+date("d/m/Y"));
    foreach ($this->_address as $address){
      $mail->addTo($address);
    }
    $mail->send();
    $this->storeNewsLetter();
    return true;
  }

  /**
   *
   * Ajoute une adresse mail à la liste de la newsletter
   * @return true si tout c'est bien passé, un array contenant l'erreur en cas de problème
   */
  public function addAddress($address) {
    $allAddress = $this->getAllAddress();
    foreach ($allAddress as $add) {
      if ($add == $address) {
        return array('already'=>$address);
      }
    }
    $this->_xmlDb->addChild("address", $address);
    $this->_xmlDb->asXML($this->_path);
    return true;
  }

  /**
   *
   * Retourne
   * @return array de array['date']=> date array['content']=> HTMLContent et array['count']=>count
   */
  public function getHistorique($count=5, $page=1) {
    if ($this->_history == null) {
      $this->loadHistory();
    }
    return $this->_history;
  }

  /**
   *
   * Stocke la newsletter ainsi que son nombre d'abonnés en base de données
   * @return
   */
  private function storeNewsLetter() {
    if ($this->_xmlHistory == null) {
      $this->loadHistory();  
    }
    $addHistory = $this->_xmlHistory->addChild("item");
    $addHistory->addChild("date", date("d/m/Y"));
    $addHistory->addChild("content", $this->_content);
    $addHistory->addChild("count", $this->getCountFollowers());
    $this->_xmlHistory->asXML(Doo::conf()->SITE_PATH.'data/newsletterHistory.xml');
    return true;
  }
  
  /**
   *
   * Retourne le nombre de followers de la newsletter
   * @return int
   */
  public function getCountFollowers() {
    return sizeof($this->_address);
  }

  
  /**
   *
   * Retourne
   * @return array de array['date']=> date array['content']=> HTMLContent et array['count']=>count
   */
  public function getMail($count=5, $page=1) {
  	return $this->_address;
  }
}